package com.xbongbong.paas.toolbox.wrap;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.Locale;

/**
 * 基础DTO，用于继承
 * @author kaka
 */
@Setter
@Getter
@ToString
public class BaseDTO implements Serializable {

    private static final long serialVersionUID = 2606082942127580247L;

    /**
     * 用户ID
     * 注意：使用BeanUtil.convertBean2Map方法将DTO转查询map时，userId条件需要手动置入
     */
    @NotBlank(message="用户ID不能为空")
    @Getter(onMethod_ = {@QueryIgnore})
    private String userId;

    /**
     * 公司ID
     */
    @NotBlank(message="公司ID不能为空")
    private String corpid;

    /**
     * 平台 web：pc浏览器；dingtalk：钉钉；all：全部
     */
    @NotBlank(message = "平台标识不能为空，请传入web或者dingtalk或者all")
    @Getter(onMethod_ = {@QueryIgnore})
    private String platform;

    /**
     * 目前没有比较优雅的方式拿到，主要用于日志
     */
    @Getter(onMethod_ = {@QueryIgnore})
    private String httpHeader;

    /**
     * 浏览器信息，主要用于登录日志，会在网关置入
     */
    @Getter(onMethod_ = {@QueryIgnore})
    private String browserInfo;

    /**
     * 操作来源ip, 主要用于登录日志，会在网关置入
     */
    @Getter(onMethod_ = {@QueryIgnore})
    private String ip;

    /**
     * 登录员工，主要用于登录日志和操作日志记录操作人，会在网关置入
     */
    @Getter(onMethod_ = {@QueryIgnore})
    private String loginUserName;

    /**
     * 跳过重复提交校验，主要用于接口自动化测试
     */
    @Getter(onMethod_ = {@QueryIgnore})
    private Boolean ignoreConCheck;

    /**
     * 从网关置入，登录用户信息, 包含基本信息 + 部门 + 权限
     */
    @Getter(onMethod_ = {@QueryIgnore})
    private UserVO loginUser;

    /**
     * 语言包参数，从网关置入，若是跳过校验的链接，请注意本参数可能为空
     * 格式: zh_CN, en_US
     */
    @Setter
    private String locale;
    /**
     * 经销商标记
     * @see com.xbongbong.pro.enums.DistributorMarkEnum
     */
    @Getter(onMethod_ = {@QueryIgnore})
    private Integer distributorMark;

    @QueryIgnore
    public String getLocale() {
        if (locale == null) {
            locale = Locale.CHINA.toString();
        }
        return locale;
    }

    /**
     * 返回 Locale类型的语言标示
     * @return 语言环境 Locale类型
     */
//    public Locale getLocaleV() {
//        if (locale == null) {
//            return Locale.CHINA;
//        }
//        String[] split = locale.split("_");
//        if (split.length > 1) {
//            return new Locale(split[0], split[1]);
//        }
//        return Locale.CHINA;
//    }
}
